/**
 * 1848. 到目标元素的最小距离
 * https://leetcode-cn.com/problems/minimum-distance-to-the-target-element/
 */
public class Solutions_1848 {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int target = 5, start = 3;  // output: 1

//        int[] nums = {1};
//        int target = 1, start = 0;  // output: 0

//        int[] nums = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
//        int target = 1,  start = 0;  // output: 0

        int result = getMinDistance(nums, target, start);
        System.out.println(result);
    }

    /**
     * 解题思路：双指针
     */
    public static int getMinDistance(int[] nums, int target, int start) {
        int left = start, right = start;
        int len = nums.length;

        // 题目保证 target 存在于 nums 中，故可以用 while true
        while (true) {
            if (left >= 0 && nums[left] == target) {
                // 左指针上找到 target，一定是第一次找到的 target，即最近距离
                return start - left;
            }
            if (right < len && nums[right] == target) {
                // 右指针上找到 target，一定是第一次找到的 target，即最近距离
                return right - start;
            }
            // 左右指针向两侧延伸
            left --;
            right ++;
        }
    }
}
